package com.liuhm.controller;

import com.liuhm.utils.ExcelUtils;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author liuhaomin
 * @date 2020/9/23
 */
@RestController
@RequestMapping("/")
public class TestController {
    @GetMapping
    public void test(HttpServletResponse response){
        // 指定创建的excel文件名称
        try {
            String path="/data123.xlsx";
            BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(path));
            // 定义一个工作薄（所有要写入excel的数据，都将保存在workbook中）
            XSSFWorkbook workbook = new XSSFWorkbook();

            // 创建一个sheet
            XSSFSheet sheet = workbook.createSheet("my-sheet-1");
            XSSFSheet sheet2 = workbook.createSheet("my-sheet-2");

            // 开始写入数据流程，2大步：1、定位到单元格，2、写入数据；定位单元格，需要通过行、列配合指定。
            // step1: 先选择第几行（0表示第一行），下面表示在第6行
            XSSFRow row = sheet.createRow(5);
            // step2：选择第几列（0表示第一列），注意，这里的第几列，是在上面指定的row基础上，也就是第6行，第3列
            XSSFCell cell = row.createCell(2);
            // step3：设置单元格的数据（写入数据）
            cell.setCellValue("hello world");
            XSSFWorkbook xssfWorkbook = workbook;
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String[] ss=new String[]{"开始xxxx系统xxxx系统xxxx系统xxxx系统xxxx系统xxxx系统xxxx统xxxx系统xxxx系统xxxx系统结束","超级管理员", sdf.format(new Date())};
            for(int i=0;i<workbook.getNumberOfSheets();i++){
                ExcelUtils.addWaterMark(xssfWorkbook, xssfWorkbook.getSheetAt(i),ss);
            }
            // 执行写入操作
            workbook.write(outputStream);
            workbook.close();
            outputStream.flush();
            outputStream.close();

            download(path,response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public HttpServletResponse download(String path, HttpServletResponse response) {
        try {
            // path是指欲下载的文件的路径。
            File file = new File(path);
            // 取得文件名。
            String filename = file.getName();
            // 取得文件的后缀名。
            String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();

            // 以流的形式下载文件。
            InputStream fis = new BufferedInputStream(new FileInputStream(path));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            // 清空response
            response.reset();
            // 设置response的Header
            response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
            response.addHeader("Content-Length", "" + file.length());
            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/octet-stream");
            toClient.write(buffer);
            toClient.flush();
            toClient.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return response;
    }


}
